from PIL import Image,ImageGrab
import time
import hashlib
import io,os

def image_hash(image):
    """
    计算图像的哈希值。

    :param image: PIL.Image对象
    :return: 图像的SHA-256哈希值
    """
    # 将图像转换为字节数据
    byte_arr = io.BytesIO()
    image.save(byte_arr, format='PNG')  # 使用PNG格式以保证没有额外的压缩损失
    # 计算哈希
    hash_object = hashlib.sha256()
    hash_object.update(byte_arr.getvalue())
    return hash_object.hexdigest()

def compare_images(img1, img2):
    """
    比较两张图片是否相同。

    :param image_path1: 第一张图片的路径
    :param image_path2: 第二张图片的路径
    :return: 布尔值，表示图片是否相同
    """
    # 计算两张图片的哈希值
    hash1 = image_hash(img1)
    hash2 = image_hash(img2)

    # 比较哈希值
    return hash1 == hash2

lastimg = None

savePth = 'out'

def saveClipBoardimage():
    """
    保存剪贴板中的图片到指定文件。
    :param filename: 要保存的文件名
    """
    global lastimg
    if not os.path.exists(savePth):
        os.mkdir(savePth)
    try:
        # 从剪贴板获取图像
        img = ImageGrab.grabclipboard()
        isImg = False
        if isinstance(img, Image.Image):
            isImg = True
        else:
            print("剪贴板中没有图像。")
            return None
        if isImg:
            if (lastimg is None):
                print('第一次读图像内容')
                lastimg = img
            elif not compare_images(lastimg, img):
                print("剪贴板中的图像与上次不同。")
                lastimg = img
            else:
                print("剪贴板中的图像与上次相同。")
                return None
            filename = 'out' + os.sep + str(int(time.time()*1000)) + '.png'
            print(f"图片已保存到 {filename}")
            img.save(filename)
            return img
    except Exception as e:
        print(f"发生错误: {e}")
        return None

# 使用示例
if __name__ == "__main__":
    saveClipBoardimage()
